/**
 * 具体主题类 - 观察者模式中的具体主题
 * 
 * 实现了Subject接口，维护观察者列表，当状态改变时通知所有观察者
 */
package com.mkx.behaviorals.observer;

import java.util.ArrayList;
import java.util.List;

public class ConcreteSubject implements Subject {
    // 观察者列表
    private List<Observer> observers = new ArrayList<>();
    // 主题状态
    private Object state;
    
    @Override
    public void registerObserver(Observer observer) {
        if (observer != null && !observers.contains(observer)) {
            observers.add(observer);
            System.out.println("观察者已注册");
        }
    }
    
    @Override
    public void removeObserver(Observer observer) {
        if (observer != null && observers.contains(observer)) {
            observers.remove(observer);
            System.out.println("观察者已移除");
        }
    }
    
    @Override
    public void notifyObservers() {
        System.out.println("通知所有观察者状态已改变");
        for (Observer observer : observers) {
            observer.update(this, state);
        }
    }
    
    @Override
    public void setState(Object state) {
        this.state = state;
        // 状态改变后通知所有观察者
        notifyObservers();
    }
    
    @Override
    public Object getState() {
        return state;
    }
}